package duplas;

import java.util.ArrayList;
import java.util.List;

public class RestricaoPadrao implements RestricaoPosicionamento {
	
	ArrayList<Dupla> _duplas = new ArrayList<Dupla>();;
	
	public RestricaoPadrao(Dupla dupla1) {
		_duplas.add(dupla1);
	}
	
	public RestricaoPadrao() {}
	
	public void adicionaDupla(Dupla dupla){
		_duplas.add(dupla);
	}
	
	@Override
	public String toString() {	
		return _duplas.toString();
	}
	
	@Override
	public void aplicarRestricao(List<ArrayList<String>> posicoes) {
		
		for(Dupla duplaCST : _duplas){
			List<String> dupla = posicoes.get(duplaCST.posicao());
			
			if ( ! dupla.get(0).equals(duplaCST.pessoa1()) ) {
				alocarPessoa(dupla.get(0), duplaCST.pessoa1(), posicoes);
				dupla.remove(0);
				dupla.add(0, duplaCST.pessoa1());
			}
			
			if ( ! dupla.get(1).equals(duplaCST.pessoa2()) ) {
				alocarPessoa(dupla.get(1), duplaCST.pessoa2(), posicoes);
				dupla.remove(1);
				dupla.add(1, duplaCST.pessoa2());
			}
		}
	}

	private void alocarPessoa(String pessoaQueIraTrocar, String pessoaProcurada, List<ArrayList<String>> posicoes) {
		
		for ( int i = 0; i < posicoes.size(); i++){
			List<String> par = posicoes.get(i);
			if (par.get(0).equals(pessoaProcurada)){				
				par.remove(0);
				par.add(0, pessoaQueIraTrocar);
			} else if (par.get(1).equals(pessoaProcurada)){				
				par.remove(1);
				par.add(1, pessoaQueIraTrocar);
			}
		}
	}	
}
